package com.weixue.controller.admin;

import com.weixue.common.IndexConfigTypeEnum;
import com.weixue.common.ServiceResultEnum;
import com.weixue.entity.IndexConfig;
import com.weixue.service.NongFuMallIndexConfigService;
import com.weixue.utils.PageQueryUtil;
import com.weixue.utils.Result;
import com.weixue.utils.ResultGenerator;
import org.springframework.stereotype.Controller;
import org.springframework.util.StringUtils;
import org.springframework.web.bind.annotation.*;

import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import java.util.Map;
import java.util.Objects;

/**
 * Day33
 *      首页模块--首页配置
 */
@Controller
@RequestMapping("/admin")
public class NongFuMallGoodsIndexConfigController {

    @Resource
    private NongFuMallIndexConfigService nongFuMallIndexConfigService;

    /**
     *  Day33
     *      页面跳转到admin/nongfu_mall_index_config.html
     *      3对应后台主推农产品配置
     *      4对应后台特色农产品配置
     *      5对应后台进口农产品配置
     */
    @GetMapping("/indexConfigs")
    public String indexConfigsPage(HttpServletRequest request, @RequestParam("configType") int configType) {
        IndexConfigTypeEnum indexConfigTypeEnum = IndexConfigTypeEnum.getIndexConfigTypeEnumByType(configType);
        if (indexConfigTypeEnum.equals(IndexConfigTypeEnum.DEFAULT)) {
            return "error/error_5xx";
        }

        request.setAttribute("path", indexConfigTypeEnum.getName());
        request.setAttribute("configType", configType);
        return "/admin/nongfu_mall_index_config";
    }

    /**
     * 列表接口
     *      前端请求的configType参数不同，执行的SQL也会对应查询不同类型的分页记录，然后获取响应条数的记录和总数并进行数据封装。
     *      列表接口是根据前端传递的分页参数进行查询并返回分页数据以供前端页面进行数据渲染的。
     */
    @RequestMapping(value = "/indexConfigs/list", method = RequestMethod.GET)
    @ResponseBody
    public Result list(@RequestParam Map<String, Object> params) {
        if (StringUtils.isEmpty(params.get("page")) || StringUtils.isEmpty(params.get("limit"))) {
            return ResultGenerator.genFailResult("参数异常！");
        }
        PageQueryUtil pageUtil = new PageQueryUtil(params);
        return ResultGenerator.genSuccessResult(nongFuMallIndexConfigService.getConfigsPage(pageUtil));
    }

    /**
     * 添加接口
     *      接收的参数为configName字段、configType字段、redirectUrl字段、goodsId字段和configRank字段。
     *      在里使用@RequestBody注解将这些字段转换为IndexConfig对象。
     *      需要注意的一点是，这里不会存储和设置任何关于商品表的其他字段，也不会对商品表进行操作，
     *      只是通过设置goodsId字段将配置项和对应的商品记录之间的关联关系存储下来。
     */
    @RequestMapping(value = "/indexConfigs/save", method = RequestMethod.POST)
    @ResponseBody
    public Result save(@RequestBody IndexConfig indexConfig) {
        if (Objects.isNull(indexConfig.getConfigType())
                || StringUtils.isEmpty(indexConfig.getConfigName())
                || Objects.isNull(indexConfig.getConfigRank())) {
            return ResultGenerator.genFailResult("参数异常！");
        }
        String result = nongFuMallIndexConfigService.saveIndexConfig(indexConfig);
        if (ServiceResultEnum.SUCCESS.getResult().equals(result)) {
            return ResultGenerator.genSuccessResult();
        } else {
            return ResultGenerator.genFailResult(result);
        }
    }


    /**
     * 修改接口
     */
    @RequestMapping(value = "/indexConfigs/update", method = RequestMethod.POST)
    @ResponseBody
    public Result update(@RequestBody IndexConfig indexConfig) {
        if (Objects.isNull(indexConfig.getConfigType())
                || Objects.isNull(indexConfig.getConfigId())
                || StringUtils.isEmpty(indexConfig.getConfigName())
                || Objects.isNull(indexConfig.getConfigRank())) {
            return ResultGenerator.genFailResult("参数异常！");
        }
        String result = nongFuMallIndexConfigService.updateIndexConfig(indexConfig);
        if (ServiceResultEnum.SUCCESS.getResult().equals(result)) {
            return ResultGenerator.genSuccessResult();
        } else {
            return ResultGenerator.genFailResult(result);
        }
    }

    /**
     * 详情接口
     */
    @GetMapping("/indexConfigs/info/{id}")
    @ResponseBody
    public Result info(@PathVariable("id") Long id) {
        IndexConfig config = nongFuMallIndexConfigService.getIndexConfigById(id);
        if (config == null) {
            return ResultGenerator.genFailResult("未查询到数据");
        }
        return ResultGenerator.genSuccessResult(config);
    }

    /**
     * 删除接口
     *      使用@RequestBody注解将前端传过来的参数封装为数组对象。
     *      如果数组为空则直接返回异常提醒。在参数验证通过后则调用deleteBatch()批量删除方法进行数据库操作。
     */
    @RequestMapping(value = "/indexConfigs/delete", method = RequestMethod.POST)
    @ResponseBody
    public Result delete(@RequestBody Long[] ids) {
        if (ids.length < 1) {
            return ResultGenerator.genFailResult("参数异常！");
        }
        if (nongFuMallIndexConfigService.deleteBatch(ids)) {
            return ResultGenerator.genSuccessResult();
        } else {
            return ResultGenerator.genFailResult("删除失败");
        }
    }


}